package com.masterclient.app.utils;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import com.eoner.common.config.Config;
import com.netease.nis.captcha.Captcha;
import com.netease.nis.captcha.CaptchaConfiguration;
import com.netease.nis.captcha.CaptchaListener;

/**
 * 作者：sean
 * 创建时间：2017/11/21 14:43
 * 功能说明：
 */

public class CaptchaUtil {

    public static String TAG = CaptchaUtil.class.getSimpleName();

    public static int CAPTCHA_NUMBER_TIMES = 0;
    private CaptchaConfiguration configuration;

    Captcha mCaptcha = null;
    /*验证码SDK,该Demo采用异步获取方式*/
    private UserLoginTask mLoginTask = null;
    private String source;

    public CaptchaUtil(Context context, String source){
        this(context);
        this.source = source;
    }

    public CaptchaUtil(Context context){
        this.source = null;
        //初始化验证码SDK相关参数，设置CaptchaId、Listener最后调用start初始化。
        CAPTCHA_NUMBER_TIMES = 0;
          configuration = new CaptchaConfiguration.Builder()
                .captchaId(Config.CaptchaId)// 验证码业务id
                //.mode(CaptchaConfiguration.ModeType.MODE_INTELLIGENT_NO_SENSE)  // 验证码类型，默认为普通验证码，如果要使用无感知请设置该类型，否则无需设置
                .listener(myCaptchaListener) //设置验证码回调监听器
                .build(context); // Context，请使用Activity实例的Context


//        if (mCaptcha == null) {
            //mCaptcha = new Captcha(context);
//        }
        //mCaptcha.setCaptchaId(Config.CaptchaId);
        //mCaptcha.setCaListener(myCaptchaListener);
        //可选：开启debug
        //mCaptcha.setDebug(false);
        //可选：设置超时时间
        //mCaptcha.setTimeout(10000);

        //设置验证码弹框的坐标位置: 只能设置left，top和宽度，高度为自动计算。默认无须设置为窗口居中。
        //mCaptcha.setPosition(1, 200, 1040, -1);
        //设置弹框时背景页面是否模糊，默认无须设置，默认显示弹框时背景页面模糊，Android默认风格。
        //mCaptcha.setBackgroundDimEnabled(false);
        //设置弹框时点击对话框之外区域是否自动消失，默认为消失。如果设置不自动消失请设置为false。
        //mCaptcha.setCanceledOnTouchOutside(false);
    }

    private CaptchaListerner captchaListerner;

    public interface CaptchaListerner{
        public void onSuccess(String neCaptchaValidate);
        public void onFailed();
    }

    public void setCaptchaListerner(CaptchaListerner captchaListerner) {
        this.captchaListerner = captchaListerner;
    }

    public void start(){
//        mLoginTask = new UserLoginTask();
//        //关闭mLoginTask任务可以放在myCaptchaListener的onCancel接口中处理
//        mLoginTask.execute();
        //必填：初始化 captcha框架
        //mCaptcha.start();
        if (configuration != null)
        mCaptcha = Captcha.getInstance().init(configuration);
        mCaptcha.validate();
        System.out.println("start ------- >");
    }

    //自定义Listener格式如下
    CaptchaListener myCaptchaListener = new CaptchaListener() {

        @Override
        public void onReady() {
            Log.i(TAG, "验证码sdk加载成功");
        }

        @Override
        public void onValidate(String result, String validate, String message) {
            //验证结果，valiadte，可以根据返回的三个值进行用户自定义二次验证
            if (validate.length() > 0) {

               if(captchaListerner!=null){
                   captchaListerner.onSuccess(validate);
                }
            } else {
                if(captchaListerner!=null){
                    captchaListerner.onFailed();
                }
            }
        }

        @Override
        public void onError(int i, String s) {
            captchaListerner.onFailed();
            if (i != 2001){
                ++CAPTCHA_NUMBER_TIMES;
            }
        }

//        @Override
//        public void closeWindow() {
//            //请求关闭页面
//            Log.i(TAG, "关闭页面");
//        }

//        @Override
//        public void onError(String errormsg) {
//            //出错
////            Log.i(TAG, "错误信息：" + errormsg);
//        }

        @Override
        public void onCancel() {
//            Log.i(TAG, "取消线程");
            //用户取消加载或者用户取消验证，关闭异步任务，也可根据情况在其他地方添加关闭异步任务接口
            if (mLoginTask != null) {
                if (mLoginTask.getStatus() == AsyncTask.Status.RUNNING) {
//                    Log.i("TAG", "stop mLoginTask");
                    mLoginTask.cancel(true);
                }
            }
        }

        @Override
        public void onClose() {

        }

//        @Override
//        public void onReady(boolean ret) {
//            //该为调试接口，ret为true表示加载Sdk完成
//            if (ret) {
////                Log.i(TAG, "验证码sdk加载成功");
//            }
//        }
    };


    /**
     * Represents an asynchronous login/registration task used to authenticate
     * the user.
     */
    public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {

        UserLoginTask() {
        }

        @Override
        protected Boolean doInBackground(Void... params) {
            //可选：简单验证DeviceId、CaptchaId、Listener值
            //return mCaptcha.checkParams();
            return true;
        }

        @Override
        protected void onPostExecute(final Boolean success) {
            if (success) {
                //必填：开始验证
                //mCaptcha.Validate();
                mCaptcha.validate();
            } else {
//                Log.i(TAG, "验证码SDK参数设置错误,请检查配置");
            }
        }

        @Override
        protected void onCancelled() {
            mLoginTask = null;
        }
    }
}
